Редактирование кода
Особенность редактора Hardella IDE заключается в том, что по факту, он не является текстовым редактором. Редактор языка ST похож на текстовый редактор, но по факту он ближе к “заполненю формы с заранее обозначенными ячейками для ввода данных”.
По началу это может показаться странным, но через небольшое время не должно вызывать дискомфорт. Эту особенность видно, например, при указании имени переменной.
Из-за этой же особенности, вставка текстового кода из буфера обмена может не срабатывать. Если код скопирован из Hardella, то всё должно работать. А скопировать код из браузера и вставить в редактор сейчас не получится (это планируется поправить в будущем).
Создание функциональных блоков
Для создания FB нужно нажать правой кнопкой в Logical View
(левая часть экрана), и выбрать New
> c.g.v.iec61131.types
> FB
.
Альтернативный вариант – ctrl+c / ctrl+v
для какого-нибудь имеющегося блока.
Так будет выглядеть новый блок после создания:
Здесь видно, что “каркас” всегда одинаков (слова FUNCTION_BLOCK
, variables
, body
), а для конкретных значений оставлено “место ввода данных”.
Название блока является обязательным, поэтому оно выделено красным. Список переменных и тело блока опциональны, поэтому они красным не подсвечены.
Сделаем блок для OR
. Смысла в нём немного (ведь можно использовать операцию a OR b
), но для примера вполне подойдёт.
Записываем название:
Далее нужно объявить переменные. Для этого можно нажать tab
и курсор переместится в область объявления переменных. Можно использовать стрелки, мышку и т.п. (кому что удобнее).
Объявление переменных
Для добавления элемента в список следует использовать enter
. Т.е. нажимаем enter
и Hardella создаёт “рыбу” для объявления переменной.
Следует учитывать, что имя указывается отдельно, тип отдельно. Двоеточие посредине уже указано и с ним ничего делать не нужно.
Пишем x
(имя переменной), нажимаем tab
(или стрелку вправо) для перехода к выбору типа переменной.
Нужно как-то указать BOOL
тип. Один вариант это взять и написать BOOL
(большими буквами).
Более интересный – и спользованием автодополнения.
Можно написать часть идентификатора, а можно вообще ничего не писать и нажать ctrl+пробел
.
BOOL
находится на втором месте, его можно выбрать стрелочками и нажать enter
.
Такой подход помогает когда точное называние блока забыто.
Хорошо, получили x : BOOL
, но как обозначить, что это будет входная переменная?
Флаги input, output
Для указания input
, output
флагов, нужно разместить курсор слева от названия переменной (т.е. слева от x
), нажать пробел
и воспользоваться одним из следующих вариантов:
- напечатать
input
(илиoutput
) - нажать
ctrl+пробел
и выбрать нужный вариант в меню:
Дублирование строк, блоков кода
Одной входной переменной явно мало, но можно её размножить клавишей ctrl+d
(от слова duplicate).
Нажимаем несколько раз и получаем такую картину:
Вторая и третья переменные подкрашены красным, т.к. нехорошо когда несколько переменных имеют одинаковое название.
Редактируем имена, и меняем тип последней переменной с input
на output
. Для этого стираем input
и добавляем output
.
Среда автоматически добавляет пустые строки между разнотипными группами переменных, поэтому в итоге код будет выглядеть так:
Введение выражений
Переходим к телу ФБ, нажимаем ctrl+пробел
, выбираем StatementList
.
После этого можно писать код на языке ST.
Для того, чтобы получить z := x OR y;
, нужно нажимать следующие клавиши:
z
– появитсяz;
:=
– появитсяz := ___;
x
– появитсяz := x;
пробел
. Если послеx
не нажать пробел, то вместоx OR
среда подумает, что мы имеем ввиду переменную с именемxOR
OR
. В итоге будетz := x OR ___;
- ‘y’
Можно было зайти и с другого конца:
:
– появится___ := ___;
Дело в том, что присваивание это единственная операция с двоеточием, поэтому сразу после довоеточия среда и понимает, что нужна операция присваиванияz
– появитсяz := ___;
tab
для перехода в правую частьOR
, нажатьctrl+пробел
, и выбрать в менюor expression
– появитсяz := ___ OR ___;
- Далее заполнить левый и правый аргументы операции
OR
нужными переменными
Копирование и вставка
ctrl+c
/ ctrl+v
работает.
Следует понимать, что среда следит за типами и смыслом выражения.
Например, не получится скопировать в буфер конструкцию IF ... END_IF
и вставить её на место объявления переменной (смысла, конечно, в такой операции немного, но стоит понимать, что и в других местах будет подобное поведение).
С другой стороны, скопировать объявление переменной и вставить рядом с другим объявлением – можно, в том числе и в другом блоке.
Большинство сложных конструкций копируются только целиком. Например, невозможно скопировать IF
без закрывающего END_IF
или без части ELSIF
веток. Если реально нужно, то нужно скопировать целиком, а потом удалить лишнее.
Переименование переменных, блоков
Для переименования переменных и блоков достаточно просто перейти к объявлению переменной и переименовать. При этом, все использования переменной будут автоматически исправлены.
Перемещение строк, блоков вверх-вниз
Очень часто приходится тасовать строки, параметры и целые фрагменты кода (например, внести операцию внутрь IF
или, наоборот, вынести из ветки).
Для этого есть горячие клавиши: ctrl+shift+↑
и ctrl+shift+↓
Комментировать